<%@ page contentType="image/jpeg" language="java" import="java.util.*,java.awt.*,java.awt.image.*,javax.imageio.*" pageEncoding="utf-8"%>

<%!
    Color getRandColor(int fc,int bc){
        Random random = new Random();
        if(fc > 255){
            fc = 255;
        }
        if (bc < 255){
            bc = 255;
        }
        int r = fc +random.nextInt(bc-fc);
        int g = fc +random.nextInt(bc-fc);
        int b = fc +random.nextInt(bc-fc);


        return new Color(r,g,b);
    }

    // 返回指定范围内的一个有机娄
    int r(int min, int max) {
        Random random = new Random();
        int num = 0;
        num = random.nextInt(max - min) + min;
        return num;
    }
%>

<%
    //设置页面不缓存  
    response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control","no-catch");
    response.setDateHeader("Expires",0);

    //在内存中创建图象  
    int width = 60;
    int height = 20;
    BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

    //创建图象  
    Graphics g = image.getGraphics();
    //生成随机对象  
    Random random = new Random();
    //设置背景色  
    g.setColor(getRandColor(200,250));
    g.fillRect(0,0,width,height);


    for(int i = 0; i < 100; i++){
        //随机产生干扰线
        g.setColor(getRandColor(180,200));
        ((Graphics2D) g).setStroke(new BasicStroke(r(1,4),BasicStroke.CAP_SQUARE,BasicStroke.JOIN_ROUND));
        int x = random.nextInt(width);
        int y = random.nextInt(height);
        int xl = random.nextInt(30);
        int yl = random.nextInt(12);

       g.drawLine(x,y,xl,yl);
    }
    //随机产生认证码,4位数字  
    String sRand = "";
    for(int i = 0; i < 4; i++){
        //设置字体
        g.setFont(new Font("Tines Nev Roman",Font.ITALIC,r(8,20)));
        String rand=null;
        if(i==1){
                rand="+";
        }else if(i==3){
            rand="=";
        }else {
            rand = String.valueOf(random.nextInt(10));
            sRand  += rand;
        }
        //将认证码显示到图象中  
        g.setColor(new Color(20 + random.nextInt(180),20 + random.nextInt(180),20 + random.nextInt(110)));
        g.drawString(rand,13*i+6,16);
    }
    session.setAttribute("code",sRand);
    //图像生效  
    g.dispose();
    //输出图像到页面
    ImageIO.setUseCache(false);
    ImageIO.write(image,"png",response.getOutputStream());
    out.clear();
    out = pageContext.pushBody();
%>  